const Controller = require('pages/controllers/controllers.js').controller;
const sugoio = require("utils/sugo-wx-mini.program.min.js"); //引入埋点SDK JS

// 2020-11-18 新增
const api = require('./core/api.js')

App({
  onLaunch: function () {
    //SDK初始化
    sugoio.App.init({
      "project_id": "tindex_rJFxdRfMg_project_Xs4JmP0jFd", //项目ID
      "token": '438bbab9667330460713b44564731b54', // 项目TOKEN
      // "gateway_host": "https://uits.infinitus.com.cn/uits-gateway", // 正式环境数据上报的地址
      "gateway_host": "https://uits.infinitus.com.cn/uits-gateway", // 测试环境数据上报的地址
      // "api_host": "https://uits.infinitus.com.cn/uits-gateway", // 正式环境可视化配置时服务端地址
      "api_host": "https://uits.infinitus.com.cn/uits-gateway", // 测试环境可视化配置时服务端地址
      "track_share_app": true, // 自动上报转发事件
      "track_pull_down_fresh": true, // 自动上报下拉刷新事件
      "track_reach_bottom": true, // 自动上报上拉触底事件
      "track_auto_duration": true, // 自动上报停留事件
      "location": true, // 是否上报地理位置
      "source_channel": ["uits_source"], //追踪的url param参数
      "debug": false // 是否启用debug
    })
    this.sugoioregister()
    this.updateScore(1)

    let model = '';
    let that=this;
    wx.getSystemInfo({
      success:  function (res)  {
      console.log(res)
      // 获取手机
      that.globalData.navHeight = res.statusBarHeight + 46;
      model = res.model;
      if (model.search('iPhone X') != -1) {
        that.globalData.isIphoneX = true
       }
       wx.setStorageSync('modelmes', model)
      },
    })
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    // wx.setStorageSync('logs', logs)
    //获取token
    let token = wx.getStorageSync('logintoken') || '';

    //优先判断token
    if (token) {
      //延时判断微信服务器Session状态
      setTimeout(() => {
        wx.checkSession({
          success: () => {
            //session_key 未过期，并且在本生命周期一直有效
          },
          fail: () => {
            // session_key 已经失效，需要重新执行登录流程
            // this.GetLogin(false);
          }
        });
      }, 1500);
    } else {
      //无token，直接登录
      // this.GetLogin();

    }
    // wx.getUpdateManager 在 1.9.90 才可用，请注意兼容
    const updateManager = wx.getUpdateManager()

    updateManager.onCheckForUpdate(function (res) {
      // 请求完新版本信息的回调
      if (res.hasUpdate) {
        wx.showModal({
          title: '更新提示',
          content: '新版本已经准备好，是否马上重启小程序？',
          success: function (res) {
            if (res.confirm) {
              // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
              updateManager.applyUpdate()
            }
          }
        });
      }
    });
    updateManager.onUpdateReady(function () {
      wx.showModal({
        title: '更新提示',
        content: '新版本已经准备好，是否马上重启小程序？',
        success: function (res) {
          if (res.confirm) {
            // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
            updateManager.applyUpdate()
          }
        }
      });
    })

    updateManager.onUpdateFailed(function () {
      wx.showModal({
        title: '已有新版本',
        content: '新版本已经上线了，请删除当前小程序，重新搜索打开',
      })
    });

    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.wxuserInfo = res.userInfo
              wx.setStorageSync('wxuserInfo', res.userInfo)
              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
              
            }
          })
        }
      }
    })

    // this.info()
  },
  sugoioregister(res){
    var userInfo={
      id:'',
      openid:'',
      unionid:'',
    }
    console.log(wx.getStorageSync('userInfo'))
    if(wx.getStorageSync('userInfo')){
      var userInfo=wx.getStorageSync('userInfo');
    }
    
    sugoio.register({
      'UserID':userInfo.cardNo || userInfo.id || '',  //用户卡号（或其他唯一标记）,登录后
      'app_name':'有氧FM-微信小程序',  //应用名称
      'app_version':'1.0.0',  //应用版本
      'openid':userInfo.openid || '', //项目在微信的id
      'unionid':userInfo.unionid || '', //用户在微信的唯一id，可不设置
      'appid':'wx4174951d7f004500'//项目的唯一id
    })
  },
  /**
   * 设置监听器
   */
  setWatcher(data, watch) { // 接收index.js传过来的data对象和watch对象
    Object.keys(watch).forEach(v => { // 将watch对象内的key遍历
      this.observe(data, v, watch[v]); // 监听data内的v属性，传入watch内对应函数以调用
    })
  },

  /**
   * 监听属性 并执行监听函数
   */
  observe(obj, key, watchFun) {
    var val = obj[key]; // 给该属性设默认值
    Object.defineProperty(obj, key, {
      configurable: true,
      enumerable: true,
      set: function (value) {
        val = value;
        watchFun(value, val); // 赋值(set)时，调用对应函数
      },
      get: function () {
        return val;
      }
    })
  },

  //登录请求
  GetLogin(flag) {
    wx.showLoading({
      title: '登录中...',
      mask: true
    });
    wx.login({
      success: res => {
        let code = res.code
        wx.getSetting({
          success: res => {
            if (res.authSetting['scope.userInfo']) {
              // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
              wx.getUserInfo({
                success: res => {
                  Controller.login({
                    code,
                    iv: res.iv,
                    encryptedData: res.encryptedData,
                    type: 2,
                  }).then(res => {
                    console.log('getUserInfo', res)
                    wx.hideLoading();
                    wx.setStorageSync('logintoken', res.data.token)
                    wx.setStorageSync('userInfo', res.data.baseData)
                    wx.setStorageSync('sessionKey', res.data.sessionKey)
                    if (this.tokenReadyCallback) {
                      this.tokenReadyCallback(res);
                    }
                    
                    this.sugoioregister()

                  }).catch(res=>{
                    wx.hideLoading();
                  })
                }
              })
            }else{
              wx.hideLoading();
            }
          }
        })
      }
    });
  },
  //获取手机号
  updatePhoneNumber(data) {
    return new Promise((resolve, reject) => {
      Controller.updatePhoneNumber({
          sessionKey: wx.getStorageSync('sessionKey'),
          iv: data.iv,
          encryptedData: data.encryptedData
        })
        .then(res => {
          console.log('获取手机号', res)
          if (res.code == 0) {
            resolve(res)
          }
        }).catch(err => {
          reject(err)
        })
    })
  },
  // 保存图片到本地
  saveImg(url) {
    // 将网络图片下载成本地路径
    console.log('海报路径', url)
    /*wx.downloadFile({
      url,
      success: res => {
        // 保存本地路径图片
        console.log('保存本地路径图片', res)
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: res => {
            console.log('保存成功', res)
            wx.showToast({
              title: '保存成功'
            })
          },
          complete() {
            wx.hideLoading()
          }
        })
      },
      fail: function (res) {},
      complete: function (res) {},
    })*/
    // 图片文件路径，可以是临时文件路径或永久文件路径 (本地路径)，不支持网络路径
    wx.saveImageToPhotosAlbum({
      filePath: url,
      success: res => {
        console.log('保存成功', res)
        wx.showToast({
          title: '保存成功'
        })
      },
      complete(res) {
        console.log('complete',res)
        wx.hideLoading()
      }
    })
  },
  ToLogin() {
    var that=this;
    if(that.globalData.islogin){
      that.globalData.islogin=false
      wx.showModal({
        title: '提示',
        content: '是否授权登录?',
        success(res) {
          that.globalData.islogin=true
          if (res.confirm) {
            wx.navigateTo({
              url: "/pages/Login/Login"
            })
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    }

  },
  //记录播放次数
  play(audioId) {
    Controller.play({
      audioId: audioId
    }).then(res => {

    })
  },
  updateScore(source,rid){
    let data={source}
    if(rid){
      data.rid=rid
    }
    Controller.updateScore(data).then(res => {

    })
  },
  // 分享
  share(audioId, type, title,img) {
    if (!wx.getStorageSync('logintoken')) {
      this.ToLogin()
    } else {
      wx.navigateTo({
        url: "/pages/AudioSharing/AudioSharing?type=" + type + "&audioId=" + audioId + '&title=' + title+ '&img=' + (img || '')
      })
    }
  },
  // 下载
  download(rid) {
    if (!wx.getStorageSync('logintoken')) {
      this.ToLogin()
    } else {
      Controller.download({
        rid: rid
      }).then(res => {
        wx.showToast({
          title: '下载成功',
          icon: 'success',
          duration: 2000
        })
      })
    }
  },
  // 收藏
  collect(rid, type, bodyId, toUserId) {
    if (!wx.getStorageSync('logintoken')) {
      this.ToLogin()
    } else {
      let data = {
        rid: rid || '',
        type: type || '',
        token: wx.getStorageSync('logintoken')
      }
      if (typeof bodyId != 'undefined') {
        data.bodyId = bodyId
      }
      if (typeof toUserId != 'undefined') {
        data.toUserId = toUserId
      }
      Controller.collect(data).then(res => {
        wx.showToast({
          title: '收藏成功',
          icon: 'success',
          duration: 1500
        })
      })
    }
  },
  // 取消收藏
  delPlayCollect(rid, type) {
    if (!wx.getStorageSync('logintoken')) {
      this.ToLogin()
    } else {
      console.log('取消收藏(播放页面收藏列表使用)', rid)
      wx.showModal({
        title: '提示',
        content: '是否取消收藏?',
        success(res) {
          if (res.confirm) {
            Controller.delPlayCollect({
              rid: rid,
              type: type
            }).then(res => {
              return res.data
            })

          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    }

  },
  // 取消收藏
  delCollect(ids, type) {
    if (!wx.getStorageSync('logintoken')) {
      this.ToLogin()
    } else {
      console.log('用户取消收藏接口', ids)
      wx.showModal({
        title: '提示',
        content: '是否取消收藏?',
        success(res) {
          if (res.confirm) {
            Controller.delCollect({
              ids: ids
            }).then(res => {

            })
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    }
  },

  // 评论
  comments(rid, type) {
    if (!wx.getStorageSync('logintoken')) {
      this.ToLogin()
    } else {
      wx.navigateTo({
        url: "/pages/Comment/Comment?rid=" + rid + "&type=" + type
      })
    }
  },
  // 转换日期
  getBeforeTime: function (time) {
    if (time === undefined || time === null) {
      return;
    }
    /* 
      IOS只识别 2019-03-01 这样的日期格式, 不支持 2019-03-01 00:00:00
      用正则替换2019-03-01日期格式为2019/03/01后问题解决
    */
    time = (time).replace(/-/g, '/');
    var result = ''
    var minute = 1000 * 60 //分钟
    var hour = minute * 60 //小时 
    var day = hour * 24 //天数
    var month = day * 30 // 月数
    var now = new Date().getTime() //当前时间戳
    var dateTimeStamp = new Date(time).getTime() //某个时间戳
    // console.log('time', time, 'now', now, 'dateTimeStamp', dateTimeStamp, "getDate(time)", getDate(time))
    var diffValue = now - dateTimeStamp
    if (diffValue < 0) return
    var monthC = diffValue / month
    var weekC = diffValue / (7 * day)
    var dayC = diffValue / day
    var hourC = diffValue / hour
    var minC = diffValue / minute
    console.log('monthC', monthC, 'weekC', weekC, 'dayC', dayC, 'hourC', hourC, 'minC', minC)
    if (monthC >= 1) {
      result = "" + parseInt(monthC) + "月前"
    } else if (weekC >= 1) {
      result = "" + parseInt(weekC) + "周前"
    } else if (dayC >= 1) {
      result = "" + parseInt(dayC) + "天前"
    } else if (hourC >= 1) {
      result = "" + parseInt(hourC) + "小时前"
    } else if (minC >= 1) {
      result = "" + parseInt(minC) + "分钟前"
    } else {
      result = "刚刚"
    }

    return result
  },

  globalData: {
    userInfo: '',
    wxuserInfo: '',
    token: '',
    navHeight: 66,
    musiclists: [],
    baseUrl: Controller.url,
    playMod: 1,
    play:1,
    settimebool:false,
    closetimecurrent:0,
    closetimeindex:-1,
    setInter:null,
    setInter2:null,
    selectsinger: null,
    currentIndex: 0,
    fullScreen: false,
    songlist: [],
    currentSong: '',
    playing: false,
    currentLyric: '',
    closetimeend: false,
    isIphoneX:false,
    islogin:true,
    firsttips:true,
    firsttips2:true,
    firsttips3:true,
    isclosetime:false,
  },
  menuConfig: {
    menu: ''
  },
  tokenReadyCallback: function () {},
  
  // 2020-11-18 新增
  api: api,
})